package clases;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintStream;
import java.util.Collections;
import java.util.Formatter;
import java.util.Iterator;
import java.util.Vector;

public class Seccion {
	
	private Profesor _profesor;
	private Vector<Alumno> _alumnos;
	private String _numero;
	private boolean _evaluacion;
	
	public Seccion() {
		// TODO Auto-generated constructor stub
		_alumnos = new Vector<Alumno>();
		_profesor = null;
		_evaluacion = false;
		_numero = "";
	}
	
	public boolean creoSeccion() {
		if(!_numero.equals(""))
			return true;
		else
			return false;
	}
	
	public boolean hayAlumnos() {
		if(!_alumnos.isEmpty())
			return true;
		else
			return false;
	}
	
	public boolean asignoProfesor() {
		if(_profesor!=null)
			return true;
		else
			return false;
	}
		
	public String get_numero() {
		return _numero;
	}

	public boolean is_evaluacion() {
		return _evaluacion;
	}

	public void set_evaluacion(boolean _evaluacion) {
		this._evaluacion = _evaluacion;
	}

	public void set_numero(String _numero) {
		this._numero = _numero;
	}

	public Profesor get_profesor() {
		return _profesor;
	}

	public void set_profesor(Profesor _profesor) {
		this._profesor = _profesor;
	}

	public Vector<Alumno> get_alumnos() {
		return _alumnos;
	}

	public void set_alumnos(Vector<Alumno> _alumnos) {
		this._alumnos = _alumnos;
	}

	public void escribirArchivo(String sFichero, String mensaje){
        File archivo = new File(sFichero);
        FileOutputStream flujo = null;
		try {
			flujo = new FileOutputStream(archivo);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
        PrintStream ps = new PrintStream(flujo);
		System.out.println(mensaje);
		ps.println(mensaje);
		
	}
	
	public void asignarProfesor(Profesor p){
		_profesor = p;
		System.out.println("El profesor "+_profesor.get_nombre()+" "+_profesor.get_cedula()+" ha sido asignado a la seccion "+_numero);
	}
	
	public void inscribirAlumno(Alumno a){
		_alumnos.add(a);
	}
	
	public Alumno retirarAlumno(String cedula){
		Alumno alumno = buscarAlumno(cedula); 
		if(alumno!=null){
			_alumnos.remove(alumno);
			return alumno;
		}
		else 
			return null;
	}
	
	public boolean buscar(String cedula){
		for (Iterator iterator = _alumnos.iterator(); iterator.hasNext();) {
			Alumno alumno = (Alumno) iterator.next();
			if(alumno.get_cedula().equals(cedula))
				return true;
		}
		return false;
		}
	
	public Alumno buscarAlumno(String cedula){
		for (Iterator iterator = _alumnos.iterator(); iterator.hasNext();) {
			Alumno alumno = (Alumno) iterator.next();
			if(alumno.get_cedula().equals(cedula))
				return alumno;
		}
		return null;
	}
	 
	public void aplicarEvaluaciones(){
		_evaluacion = true;
		for (Iterator iterator = _alumnos.iterator(); iterator.hasNext();) {
			Alumno alumno = (Alumno) iterator.next();
			alumno.presentarEvalucacion();
			System.out.println("El alumno "+alumno.get_nombre()+" "+alumno.get_apellido()+" obtuvo "+alumno.get_parcial1()+" en el primer parcial "+alumno.get_parcial2()+" en el segundo parcial "+alumno.get_parcial3()+" en el tercer parcial");
			System.out.println("");
		}
		_profesor.presentarAlumnos(_alumnos);
		System.out.println("Las evaluaciones Fueron Aplicadas Exitosamente");
	}
    public Vector<Alumno> listarCedulas(){
    	Collections.sort(_alumnos, new ComparadorCedula());
    	String mensaje = "Listado de los Alumnos de la Seccion "+_numero+" Ordenados por Cedula \n";
    	mensaje+="\n";
    	mensaje+="Cedula   Nombre         Apellido";
    	mensaje+="\n";
    	Formatter f;
    	
    	for (Iterator iterator = _alumnos.iterator(); iterator.hasNext();) {
    		f = new Formatter();
			Alumno alumno = (Alumno) iterator.next();
			f.format("%s %s %s \n", alumno.get_cedula(), alumno.get_nombre(),  alumno.get_apellido());
			System.out.println(f.toString());
			mensaje+=f.toString();
		}
    	escribirArchivo("ListadoporCedula.txt", mensaje);
    	return _alumnos;
    }
    
    public Vector<Alumno> listarNotasFinales(){
    	Collections.sort(_alumnos, new ComparadorNota());
    	String mensaje = "Listado de los Alumnos de la Seccion "+_numero+" Ordenados por Notas Finales \n";
    	mensaje+="\n";
    	mensaje+="Cedula   Nombre         Apellido       Nota";
    	mensaje+="\n";
    	Formatter f;
    	for (Iterator iterator = _alumnos.iterator(); iterator.hasNext();) {
    		f = new Formatter();
    		Alumno alumno = (Alumno) iterator.next();
			f.format("%s %s %s %f", alumno.get_cedula(), alumno.get_nombre(),  alumno.get_apellido(),new Float(alumno.get_notafinal()));
			mensaje+=f.toString()+"\n";
			}
    	escribirArchivo("ListadoporNotas.txt", mensaje);
    	return _alumnos;
    }
    
    public Vector<Alumno> listarAprobados(){
    	Vector<Alumno> aux = new Vector<Alumno>();
    	String mensaje = "Listado de los Alumnos Aprobados de la Seccion "+_numero+"\n";
    	mensaje+="\n";
    	mensaje+="Cedula   Nombre         Apellido       Nota";
    	mensaje+="\n";
    	Formatter f;
    	for (Iterator iterator = _alumnos.iterator(); iterator.hasNext();) {
    		f = new Formatter();
    		Alumno alumno = (Alumno) iterator.next();
			if(alumno.is_estado()){
				aux.add(alumno);
				f.format("%s %s %s %f", alumno.get_cedula(), alumno.get_nombre(),  alumno.get_apellido(),new Float(alumno.get_notafinal()));
				mensaje+=f.toString()+"\n";
			}
		}
    	escribirArchivo("ListadoAprobados.txt", mensaje);
    	return aux;
    }
    
    public Vector<Alumno> listarAplazados(){
    	Vector<Alumno> aux = new Vector<Alumno>();
    	String mensaje = "Listado de los Alumnos Aplazados de la Seccion "+_numero+"\n";
    	mensaje+="\n";
    	mensaje+="Cedula   Nombre         Apellido       Nota";
    	mensaje+="\n";
    	Formatter f ;
    	for (Iterator iterator = _alumnos.iterator(); iterator.hasNext();) {
    		f = new Formatter();
    		Alumno alumno = (Alumno) iterator.next();
			if(!alumno.is_estado()){
				aux.add(alumno);
				f.format("%s %s %s %f", alumno.get_cedula(), alumno.get_nombre(),  alumno.get_apellido(),new Float(alumno.get_notafinal()));
				mensaje+=f.toString()+"\n";
			}
		}
    	escribirArchivo("ListadoAplazados.txt", mensaje);
    	return aux;
    }
    
    public float generarPromedio(){
    	int acum=0;
    	for (Iterator iterator = _alumnos.iterator(); iterator.hasNext();) {
			Alumno alumno = (Alumno) iterator.next();
			acum+=alumno.get_notafinal();
    	}
    	return (acum/_alumnos.size());
    
    }

}
